home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / cheesesauce / orderzones < prev    next >
Text File  |  1997-11-28  |  4KB  |  268 lines

  1.  
  2. tmplistgraph: dc.l 0
  3.  
  4. OrderZones:
  5.  
  6.  move.l ListOfGraphRooms,a0
  7. ; a0=list of rooms to draw.
  8.  
  9.  move.l a0,tmplistgraph
  10.  
  11.  move.l #ToDrawTab,a1
  12.  move.l #WorkSpace,a4
  13.  move.l a1,a3
  14.  
  15.  moveq #99,d0
  16.  moveq #0,d1
  17. .clrtab:
  18.  move.l d1,(a1)+
  19.  dbra d0,.clrtab
  20.  
  21.  move.l a0,a1
  22.  move.l #OrderTab,a5
  23.  
  24. settodraw:
  25.  move.w (a1),d0
  26.  blt.s nomoreset
  27.  
  28.  st (a3,d0.w)
  29.  move.l 4(a1),(a4,d0.w*4)
  30.  
  31.  adda.w #8,a1
  32.  bra.s settodraw
  33.  
  34. dummy: dc.w 0
  35.  
  36. nomoreset:
  37.  
  38. ; We now have a table with $ff rep.
  39. ; a room to be drawn at some stage.
  40.  
  41.  move.l tmplistgraph,a0
  42.  move.l #OrderTab,a2
  43.  moveq #0,d0
  44.  moveq #2,d1
  45.  
  46. putinn:
  47.  move.w (a0),d2
  48.  blt putallin
  49.  move.l ZoneGraphAdds,a1
  50.  move.l (a1,d2.w*4),a1
  51.  add.l LEVELGRAPHICS,a1
  52.  addq #8,a2
  53.  
  54.  move.w d2,2(a2)
  55.  move.w d0,(a2)
  56.  move.w d1,4(a2)
  57.  addq #1,d0
  58.  addq #1,d1
  59.  
  60.  adda.w #8,a0
  61.  bra putinn
  62.  
  63. putallin:
  64.  
  65.  move.w #-1,4(a2)
  66.  
  67.  move.w #1,OrderTab+4
  68.  move.w #-1,OrderTab
  69.  move.w #-1,OrderTab+2
  70.  move.w #2,d5 ; off end of list.
  71.  
  72.  move.w #100,d7    ; which ones to look
  73.          ; at.
  74.  
  75.  move.l a2,a5
  76. ; clr.b farendfound
  77.          
  78. RunThroughList:
  79.  
  80.  move.l FloorLines,a1
  81.  
  82.  move.w 2(a5),d0
  83.  move.l #WorkSpace,a6
  84.  lea (a6,d0.w*4),a6
  85.  move.l (a6),d6
  86.  move.l ZoneAdds,a0
  87.  move.l (a0,d0.w*4),a0
  88.  add.l LEVELDATA,a0
  89.  
  90.  adda.w ToExitList(a0),a0
  91.  
  92.  move.l a5,a4
  93. ; tst.b farendfound
  94. ; bne.s nochangeit
  95. ; move.l a5,farendpt
  96. ;nochangeit:
  97.  
  98.  move.w (a5),d0
  99.  blt doneallthispass
  100.  
  101.  move.l #OrderTab,a5    
  102.  lea (a5,d0.w*8),a5
  103. ; clr.b donesomething
  104.  bsr InsertList
  105.  
  106.  dbra d7,RunThroughList
  107.  
  108. doneallthispass:
  109.  
  110. dontorder:
  111.  
  112.  move.l #OrderTab,a5
  113.  move.w 4(a5),d0
  114.  lea (a5,d0.w*8),a5
  115.  
  116.  move.l #FinalOrder,a0
  117. showorder:
  118.  move.w 2(a5),(a0)+
  119.  move.w 4(a5),d0
  120.  blt.s doneorder
  121.  move.l #OrderTab,a5
  122.  lea (a5,d0.w*8),a5
  123.  bra showorder
  124.  
  125. doneorder:
  126.  
  127.  move.l a0,endoflist
  128.  
  129. ; move.w d7,TempBuffer
  130.  
  131.  rts
  132.  
  133. farendfound: dc.b 0
  134. donesomething: dc.b 0
  135. farendpt: dc.l 0
  136.  
  137. InsertList
  138.  move.l d7,-(a7)
  139.  moveq #0,d7
  140.  
  141. InsertLoop
  142.  
  143.  move.w (a0)+,d0    ; floor line
  144.  blt allinlist
  145.  asl.w #4,d0
  146. ; tst.l 8(a1,d0.w)
  147. ; beq.s InsertLoop
  148.  moveq #0,d1
  149.  move.w 8(a1,d0.w),d1
  150.  blt.s buggergerger
  151.  
  152.  btst d7,d6
  153.  bne indrawlist
  154. buggergerger:
  155.  addq #3,d7
  156.  bra InsertLoop
  157. indrawlist 
  158.  addq #1,d7
  159.  
  160.  btst d7,d6
  161.  bne.s wealreadyknow
  162.  
  163.  
  164. ; Here is a room in the draw list.
  165. ; We want to find if it is closer than
  166. ; this one.
  167. ; Find out if it is further away
  168. ; or closer than the current zone.
  169.  
  170.  bset d7,d6
  171.  
  172.  move.w xoff,d2
  173.  move.w zoff,d3
  174.  sub.w (a1,d0.w),d2
  175.  sub.w 2(a1,d0.w),d3
  176.  muls 6(a1,d0.w),d2
  177.  muls 4(a1,d0.w),d3
  178.  addq #1,d7
  179.  sub.l d3,d2
  180.  ble PutDone
  181.  bset d7,d6
  182.  bra mustdo
  183.  
  184. wealreadyknow:
  185.  addq #1,d7
  186.  btst d7,d6
  187.  beq PutDone
  188.  
  189. *****************************
  190. * If this connected zone is supposed
  191. * to be closer, then ignore it
  192.  
  193. mustdo:
  194.  
  195. * The connected zone is supposed to
  196. * be further away, so if it is closer
  197. * then we need to move to other side
  198. * of it.
  199.  
  200.  move.l #OrderTab,a3
  201.  
  202.  move.w (a4),d0
  203.  blt.s notcloser
  204.  
  205. checkcloser:
  206.  cmp.w 2(a3,d0.w*8),d1
  207.  beq.s iscloser
  208.  
  209.  move.w (a3,d0.w*8),d0
  210.  bge.s checkcloser
  211.  bra notcloser
  212.  
  213. iscloser:
  214.  
  215.  st donesomething
  216.  
  217. * The zone which is further away is
  218. * for some reason in the closer part
  219. * of the list. We therefore want to
  220. * move in front of it. a3,d0.w*8 points
  221. * to the incorrect one.
  222.  
  223.  move.w (a4),d2
  224.  move.w 4(a3,d2.w*8),d5 ; this place
  225.  move.w 4(a4),d3
  226.  blt.s fromend
  227.  
  228.  move.w d2,(a3,d3.w*8)
  229.  
  230. fromend:
  231.  
  232.  move.w d3,4(a3,d2.w*8)
  233.  
  234.  move.w (a3,d0.w*8),d2
  235.  move.w 4(a3,d2.w*8),d4
  236.  
  237.  move.w d2,(a3,d5.w*8)
  238.  move.w d4,4(a3,d5.w*8)
  239.  move.w d5,(a3,d4.w*8)
  240.  move.w d5,4(a3,d2.w*8)
  241.  
  242. notcloser:
  243.  
  244. PutDone:
  245.  addq #1,d7
  246.  
  247. notindrawlist:
  248.  
  249.  bra InsertLoop
  250.  
  251. allinlist:
  252.  
  253.  move.l d6,(a6)
  254.  move.l (a7)+,d7
  255. ; tst.b donesomething
  256. ; bne.s notfoundend
  257. ; st farendfound
  258. ;notfoundend:
  259.  
  260.  rts
  261.  
  262. endoflist: dc.l 0
  263. ToDrawTab:
  264.  ds.l 400
  265. OrderTab: ds.l 400
  266.  dc.w -1
  267. FinalOrder: ds.l 400
  268. doneone: dc.w 0